package cn.kgc.reflect;

/**
 * @author: mosin
 * @version: v1.0  2022/10/20
 * 反射的基本使用
 *  什么是反射：
 *   在程序运行的过程中 对类中的属性 方法 构造方法 注解 进行操作的一种行为
 *    类  ->  属性 方法 构造方法 注解    -> 分解 属性对象  方法对象
 *  User user =  new User();  构造方法
 *  1.创建的对象已经固定
 *  2.存在代码耦合
 *
 * 创建不同类型的对象   反射
 *
 *步骤：
 * 1. 获取类对象  class  类    java  一切皆对象   Class 类对象   Student   student
 *   方式：
 *      1. 对象.getClass()  student.getClass()
 *      2. 类名.class     Student.class
 *      3. Class.forName("类的全限定名")  推荐   体现反射的动态性
 *
 */
public class ReflectDemo01 {

    public static void main(String[] args) {

        // 获取类对象  方式1  对象.getClass()
        User user = new User();
        Class clazz = user.getClass();
        System.out.println("clazz = " + clazz);

        // 获取类对象  方式2  类名.class
        clazz = User.class;
        System.out.println("clazz = " + clazz);


        // 获取类对象  方式3  Class.forName("类的全限定名")  包名+类名  推荐
        try {
            clazz = Class.forName("cn.kgc.reflect.User");
            System.out.println("clazz = " + clazz);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }





}
